package com.aiwiown.snackmq.api;

import com.aiwiown.snackmq.common.message.Message;

/**
 * 事务状态回查监听器接口。
 * <p>
 * 当 Broker 发现有长时间未提交或回滚的“半消息”时，会主动向生产者集群发起回查请求。
 * 生产者客户端在收到回查请求后，会调用业务方实现的此接口来确定该事务的最终状态。
 * </p>
 */
public interface TransactionStateListener {

    /**
     * 检查本地事务的最终状态。
     * <p>
     * 业务方需要在此方法中，根据消息内容（例如，订单ID）检查本地业务（如数据库）
     * 的真实状态，并返回对应的事务状态。
     * </p>
     *
     * @param msg 当初发送的半消息。
     * @return 本地事务的最终状态 (COMMITTED, ROLLED_BACK, or UNKNOWN)。
     */
    TransactionState checkLocalTransactionState(Message msg);
}